"""Components for YUI, used by the yui module.

Current for 2.7.  This is stolen from yuiloader.js.


type: 'js' or 'css'
path: 'path/to/foo.js'
requires: Other components this requires.
optional: Optional components.
skinnable: Whether or not skinnable.
after: Must appear after these components.
supersedes: Components this replaces.
pkg: CSS package name for JS modules (defaults to the module name).
rollup: XXX not used (for CSS rollups)

Skinnable:

    # Default skin to use if no override for a component.
    default_skin = 'sam'

    # Base combined with the YUI base URL.
    base = 'assets/skins/'

    # Use this CSS instead if more than rollup_count CSS files are used.
    rollup_name = 'skin.css'

    # Number of CSS files that will cause it to use rollup_name.
    rollup_count = 3

    # Skin overrides.
    # The key is the component name.
    # The value is a list of skin names.
    overrides = {}

    # CSS files that must appear before the skin file.
    after = ['reset', 'fonts', 'grids', 'base']


"""

def COMPONENTS():
    return {

    'animation': {
        'name': 'animation',
        'type': 'js',
        'path': 'animation/animation-min.js',
        'requires': ['dom', 'event']
    },

    'autocomplete': {
        'name': 'autocomplete',
        'type': 'js',
        'path': 'autocomplete/autocomplete-min.js',
        'requires': ['dom', 'event', 'datasource'],
        'optional': ['connection', 'animation'],
        'skinnable': True
    },

    'base': {
        'name': 'base',
        'type': 'css',
        'path': 'base/base-min.css',
        'after': ['reset', 'fonts', 'grids']
    },

    'button': {
        'name': 'button',
        'type': 'js',
        'path': 'button/button-min.js',
        'requires': ['element'],
        'optional': ['menu'],
        'skinnable': True
    },

    'calendar': {
        'name': 'calendar',
        'type': 'js',
        'path': 'calendar/calendar-min.js',
        'requires': ['event', 'dom'],
        'skinnable': True
    },

    'carousel': {
        'name': 'carousel',
        'type': 'js',
        'path': 'carousel/carousel-min.js',
        'requires': ['element'],
        'optional': ['animation'],
        'skinnable': True
    },

    'charts': {
        'name': 'charts',
        'type': 'js',
        'path': 'charts/charts-min.js',
        'requires': ['element', 'json', 'datasource']
    },

    'colorpicker': {
        'name': 'colorpicker',
        'type': 'js',
        'path': 'colorpicker/colorpicker-min.js',
        'requires': ['slider', 'element'],
        'optional': ['animation'],
        'skinnable': True
    },

    'connection': {
        'name': 'connection',
        'type': 'js',
        'path': 'connection/connection-min.js',
        'requires': ['event']
    },

    'container': {
        'name': 'container',
        'type': 'js',
        'path': 'container/container-min.js',
        'requires': ['dom', 'event'],
        # button is also optional, but this creates a circular
        # dependency when loadOptional is specified.  button
        # optionally includes menu, menu requires container.
        'optional': ['dragdrop', 'animation', 'connection'],
        'supersedes': ['containercore'],
        'skinnable': True
    },

    'containercore': {
        'name': 'containercore',
        'type': 'js',
        'path': 'container/container_core-min.js',
        'requires': ['dom', 'event'],
        'pkg': 'container'
    },

    'cookie': {
        'name': 'cookie',
        'type': 'js',
        'path': 'cookie/cookie-min.js',
        'requires': ['yahoo']
    },

    'datasource': {
        'name': 'datasource',
        'type': 'js',
        'path': 'datasource/datasource-min.js',
        'requires': ['event'],
        'optional': ['connection']
    },

    'datatable': {
        'name': 'datatable',
        'type': 'js',
        'path': 'datatable/datatable-min.js',
        'requires': ['element', 'datasource'],
        'optional': ['calendar', 'dragdrop', 'paginator'],
        'skinnable': True
    },

    'dom': {
        'name': 'dom',
        'type': 'js',
        'path': 'dom/dom-min.js',
        'requires': ['yahoo']
    },

    'dragdrop': {
        'name': 'dragdrop',
        'type': 'js',
        'path': 'dragdrop/dragdrop-min.js',
        'requires': ['dom', 'event']
    },

    'editor': {
        'name': 'editor',
        'type': 'js',
        'path': 'editor/editor-min.js',
        'requires': ['menu', 'element', 'button'],
        'optional': ['animation', 'dragdrop'],
        'supersedes': ['simpleeditor'],
        'skinnable': True
    },

    'element': {
        'name': 'element',
        'type': 'js',
        'path': 'element/element-min.js',
        'requires': ['dom', 'event']
    },

    'event': {
        'name': 'event',
        'type': 'js',
        'path': 'event/event-min.js',
        'requires': ['yahoo']
    },

    'fonts': {
        'name': 'fonts',
        'type': 'css',
        'path': 'fonts/fonts-min.css'
    },

    'get': {
        'name': 'get',
        'type': 'js',
        'path': 'get/get-min.js',
        'requires': ['yahoo']
    },

    'grids': {
        'name': 'grids',
        'type': 'css',
        'path': 'grids/grids-min.css',
        'requires': ['fonts'],
        'optional': ['reset']
    },

    'history': {
        'name': 'history',
        'type': 'js',
        'path': 'history/history-min.js',
        'requires': ['event']
    },

     'imagecropper': {
        'name': 'imagecropper',
         'type': 'js',
         'path': 'imagecropper/imagecropper-min.js',
         'requires': ['dom', 'event', 'dragdrop', 'element', 'resize'],
         'skinnable': True
     },

     'imageloader': {
        'name': 'imageloader',
        'type': 'js',
        'path': 'imageloader/imageloader-min.js',
        'requires': ['event', 'dom']
     },

     'json': {
        'name': 'json',
        'type': 'js',
        'path': 'json/json-min.js',
        'requires': ['yahoo']
     },

     'layout': {
        'name': 'layout',
         'type': 'js',
         'path': 'layout/layout-min.js',
         'requires': ['dom', 'event', 'element'],
         'optional': ['animation', 'dragdrop', 'resize', 'selector'],
         'skinnable': True
     },

    'logger': {
        'name': 'logger',
        'type': 'js',
        'path': 'logger/logger-min.js',
        'requires': ['event', 'dom'],
        'optional': ['dragdrop'],
        'skinnable': True
    },

    'menu': {
        'name': 'menu',
        'type': 'js',
        'path': 'menu/menu-min.js',
        'requires': ['containercore'],
        'skinnable': True
    },

    'paginator': {
        'name': 'paginator',
        'type': 'js',
        'path': 'paginator/paginator-min.js',
        'requires': ['element'],
        'skinnable': True
    },

    'profiler': {
        'name': 'profiler',
        'type': 'js',
        'path': 'profiler/profiler-min.js',
        'requires': ['yahoo']
    },


    'profilerviewer': {
        'name': 'profilerviewer',
        'type': 'js',
        'path': 'profilerviewer/profilerviewer-min.js',
        'requires': ['profiler', 'yuiloader', 'element'],
        'skinnable': True
    },

    'reset': {
        'name': 'reset',
        'type': 'css',
        'path': 'reset/reset-min.css'
    },

    'reset-fonts-grids': {
        'name': 'reset',
        'type': 'css',
        'path': 'reset-fonts-grids/reset-fonts-grids.css',
        'supersedes': ['reset', 'fonts', 'grids', 'reset-fonts'],
        'rollup': 4
    },

    'reset-fonts': {
        'name': 'reset',
        'type': 'css',
        'path': 'reset-fonts/reset-fonts.css',
        'supersedes': ['reset', 'fonts'],
        'rollup': 2
    },

     'resize': {
        'name': 'resize',
         'type': 'js',
         'path': 'resize/resize-min.js',
         'requires': ['dom', 'event', 'dragdrop', 'element'],
         'optional': ['animation'],
         'skinnable': True
     },

    'selector': {
        'name': 'selector',
        'type': 'js',
        'path': 'selector/selector-min.js',
        'requires': ['yahoo', 'dom']
    },

    'simpleeditor': {
        'name': 'simpleeditor',
        'type': 'js',
        'path': 'editor/simpleeditor-min.js',
        'requires': ['element'],
        'optional': ['containercore', 'menu', 'button', 'animation', 'dragdrop'],
        'skinnable': True,
        'pkg': 'editor'
    },

    'slider': {
        'name': 'slider',
        'type': 'js',
        'path': 'slider/slider-min.js',
        'requires': ['dragdrop'],
        'optional': ['animation'],
        'skinnable': True
    },

     'stylesheet': {
        'name': 'stylesheet',
        'type': 'js',
        'path': 'stylesheet/stylesheet-min.js',
        'requires': ['yahoo']
     },

    'tabview': {
        'name': 'tabview',
        'type': 'js',
        'path': 'tabview/tabview-min.js',
        'requires': ['element'],
        'optional': ['connection'],
        'skinnable': True
    },

    'treeview': {
        'name': 'treeview',
        'type': 'js',
        'path': 'treeview/treeview-min.js',
        'requires': ['event', 'dom'],
        'optional': ['json'],
        'skinnable': True
    },

    'uploader': {
        'name': 'uploader',
        'type': 'js',
        'path': 'uploader/uploader.js',
        'requires': ['element']
    },

    'utilities': {
        'name': 'utilities',
        'type': 'js',
        'path': 'utilities/utilities.js',
        'supersedes': ['yahoo', 'event', 'dragdrop', 'animation', 'dom', 'connection', 'element', 'yahoo-dom-event', 'get', 'yuiloader', 'yuiloader-dom-event'],
        'rollup': 8
    },

    'yahoo': {
        'name': 'yahoo',
        'type': 'js',
        'path': 'yahoo/yahoo-min.js'
    },

    'yahoo-dom-event': {
        'name': 'yahoo',
        'type': 'js',
        'path': 'yahoo-dom-event/yahoo-dom-event.js',
        'supersedes': ['yahoo', 'event', 'dom'],
        'rollup': 3
    },

    'yuiloader': {
        'name': 'yuiloader',
        'type': 'js',
        'path': 'yuiloader/yuiloader-min.js',
        'supersedes': ['yahoo', 'get']
    },

    'yuiloader-dom-event': {
        'name': 'yuiloader',
        'type': 'js',
        'path': 'yuiloader-dom-event/yuiloader-dom-event.js',
        'supersedes': ['yahoo', 'dom', 'event', 'get', 'yuiloader', 'yahoo-dom-event'],
        'rollup': 5
    },

    'yuitest': {
        'name': 'yuitest',
        'type': 'js',
        'path': 'yuitest/yuitest-min.js',
        'requires': ['logger'],
        'skinnable': True
    }
}
